Pretrained models হল এমন মডেল যা আগে বড় ডেটাসেট (যেমন, ImageNet) দিয়ে ট্রেনিং করা হয়েছে এবং পরে বিভিন্ন টাস্কে পুনরায় ব্যবহার করা যেতে পারে। এসব মডেলকে transfer learning এর জন্য ব্যবহৃত হয়, যেখানে মডেলটি নতুন টাস্ক বা ডেটাসেটের জন্য পুনরায় ফাইন-টিউন করা হয়।
প্রথমে, কিছু জনপ্রিয় pretrained মডেল সম্পর্কে আলোচনা করা হবে, যেমন VGG, ResNet, এবং Inception। তারপর, তাদের ব্যবহার দেখানো হবে কিভাবে Python এবং PyTorch-এ এসব মডেল ব্যবহার করতে হয়।
১. VGG (Visual Geometry Group)
VGG মডেলটি Oxford University এর Visual Geometry Group দ্বারা তৈরি করা হয়েছিল এবং এটি Convolutional Neural Network (CNN) আর্কিটেকচারের একটি জনপ্রিয় উদাহরণ। VGG মডেলের দুটি প্রধান সংস্করণ রয়েছে: VGG16 এবং VGG19, যেখানে সংখ্যা সংখ্যা হল কনভোলুশনাল স্তরের সংখ্যা। এই মডেলটি ImageNet ডেটাসেটে ট্রেনিং করা হয়েছে এবং সেগুলির বিভিন্ন সিস্টেম এবং অ্যাপ্লিকেশনে সেরা পারফরম্যান্স দেখিয়েছে।
VGG এর সুবিধা:
- খুব সহজ এবং সরল আর্কিটেকচার।
- উন্নত বৈশিষ্ট্য শনাক্তকরণ (feature extraction)।
VGG ব্যবহার:
import torch
import torchvision.models as models
# Pretrained VGG16 Model
vgg16 = models.vgg16(pretrained=True)
# Set the model to evaluation mode
vgg16.eval()
# Example input (a batch of images)
input_tensor = torch.randn(1, 3, 224, 224)
# Forward pass
output = vgg16(input_tensor)
২. ResNet (Residual Networks)
ResNet মডেলটি Microsoft এর গবেষকরা তৈরি করেছেন এবং এটি deep learning আর্কিটেকচারে একটি বিপ্লব ঘটায়। ResNet এর প্রধান বৈশিষ্ট্য হল Residual Learning, যা মডেলকে অত্যন্ত গভীর (deep) এবং শক্তিশালী করতে সহায়ক। এটি skip connections ব্যবহার করে, যা মডেলটিকে খুব গভীর এবং আরো কার্যকরী করে তোলে, কারণ এটি পুরনো স্তরের আউটপুটকে সরাসরি পরবর্তী স্তরে পাঠায়।
ResNet মডেলটি বিভিন্ন আর্কিটেকচারে আসে, যেমন ResNet18, ResNet34, ResNet50, ResNet101, এবং ResNet152।
ResNet এর সুবিধা:
- খুব গভীর নেটওয়ার্ক তৈরি করার ক্ষমতা।
- vanishing gradient problem কাটিয়ে ওঠে residual connections ব্যবহার করে।
ResNet ব্যবহার:
import torch
import torchvision.models as models
# Pretrained ResNet50 Model
resnet50 = models.resnet50(pretrained=True)
# Set the model to evaluation mode
resnet50.eval()
# Example input (a batch of images)
input_tensor = torch.randn(1, 3, 224, 224)
# Forward pass
output = resnet50(input_tensor)
৩. Inception
Inception মডেলটি Google এর তৈরি এবং এটি deep CNN আর্কিটেকচারের একটি উদাহরণ। Inception মডেলটি multi-level feature extraction করতে সক্ষম, যেখানে বিভিন্ন সাইজের কনভোলুশনাল ফিল্টার একযোগে কাজ করে এবং পরবর্তীতে তাদের আউটপুট একত্রিত (concatenate) করা হয়। এটি Inception-v3 আর্কিটেকচারটি অত্যন্ত জনপ্রিয়, যা বিশেষ করে ছবির শ্রেণীবিভাগে উচ্চ কর্মক্ষমতা প্রদান করে।
Inception এর সুবিধা:
- বিভিন্ন আকারের কনভোলুশনাল ফিল্টার ব্যবহার করে বৈশিষ্ট্য চিত্রণ।
- উচ্চ কর্মক্ষমতা এবং কম হিসাবের শক্তি ব্যবহার।
Inception ব্যবহার:
import torch
import torchvision.models as models
# Pretrained InceptionV3 Model
inception_v3 = models.inception_v3(pretrained=True)
# Set the model to evaluation mode
inception_v3.eval()
# Example input (a batch of images)
input_tensor = torch.randn(1, 3, 299, 299)
# Forward pass
output = inception_v3(input_tensor)
Pretrained Model ব্যবহার করার সুবিধা
- ট্রেনিং সময় কমানো: যখন pretrained মডেল ব্যবহার করা হয়, তখন মডেলটির অনেক সময়ই পুনরায় ট্রেন করার প্রয়োজন হয় না। এটি transfer learning হিসেবে পরিচিত। কেবলমাত্র শেষ স্তরটি (output layer) পরিবর্তন করে নতুন ডেটাসেটের জন্য ফাইন-টিউন করা হয়।
- ভাল পারফরম্যান্স: pretrained মডেলগুলি অনেক বড় ডেটাসেটে ট্রেনিং করা থাকে (যেমন, ImageNet), ফলে তারা সাধারণভাবে ভালো বৈশিষ্ট্য শিখে ফেলে এবং নতুন ডেটাসেটের জন্য ভালো ফলাফল দিতে পারে।
- কম্পিউটেশনাল ইফিসিয়েন্সি: pretrained মডেলগুলি কম্পিউটেশনালভাবে অনেক কার্যকরী, কারণ তাদের অনেকাংশের কাজ করা হয়ে গেছে পূর্বের ট্রেনিং এর মাধ্যমে।
Transfer Learning এর মাধ্যমে Pretrained Model Fine-tuning
যখন pretrained মডেল ব্যবহার করা হয়, তখন সাধারণত শেষ স্তরের (output layer) পরিবর্তন করা হয় এবং তারপর নতুন ডেটাসেটে পুনরায় ট্রেনিং করা হয়। উদাহরণস্বরূপ, ResNet50 মডেলটি 1000 ক্লাসে ট্রেনিং করা, কিন্তু আমরা যদি 10 ক্লাসে ট্রেনিং করতে চাই, তবে শেষ স্তরটি পরিবর্তন করতে হবে।
import torch
import torch.nn as nn
import torchvision.models as models
# Pretrained ResNet50 Model
resnet50 = models.resnet50(pretrained=True)
# Freeze all layers except the last layer
for param in resnet50.parameters():
param.requires_grad = False
# Modify the final layer to match the new number of classes (e.g., 10 classes)
resnet50.fc = nn.Linear(resnet50.fc.in_features, 10)
# Set the model to training mode
resnet50.train()
# Example input (a batch of images)
input_tensor = torch.randn(1, 3, 224, 224)
# Forward pass
output = resnet50(input_tensor)
এখানে, আমরা ResNet50 এর ফাইনাল লেয়ারটি ১০টি ক্লাসের জন্য আপডেট করেছি এবং বাকি স্তরগুলোকে "ফ্রিজ" (freeze) করেছি, যাতে তাদের ওজন পরিবর্তন না হয়।
Read more